package com.jiangnan.util

import android.content.Context
import android.widget.ImageView
import com.bumptech.glide.Glide
import com.bumptech.glide.request.RequestOptions

/**
 * GlideUtil 是一个单例工具类，封装了 Glide 的常用方法，
 * 方便在项目中加载图片。
 */
object GlideUtil {

    /**
     * 加载网络图片到指定的 ImageView，不设置占位符或错误图。
     *
     * @param context 上下文
     * @param url 图片的 URL 地址
     * @param imageView 目标 ImageView
     */
    fun loadImage(context: Context, url: String, imageView: ImageView) {
        Glide.with(context)
            .load(url)
            .into(imageView)
    }

    /**
     * 加载图片，同时设置占位符和错误图。
     *
     * @param context 上下文
     * @param url 图片的 URL 地址
     * @param placeholderResId 占位符资源 id（加载中显示的图片）
     * @param errorResId 错误图资源 id（加载失败显示的图片）
     * @param imageView 目标 ImageView
     */
    fun loadImageWithPlaceholder(
        context: Context,
        url: String,
        placeholderResId: Int,
        errorResId: Int,
        imageView: ImageView
    ) {
        Glide.with(context)
            .load(url)
            .apply(
                RequestOptions()
                    .placeholder(placeholderResId)
                    .error(errorResId)
            )
            .into(imageView)
    }

    /**
     * 加载圆形图片，常用于头像展示。
     *
     * @param context 上下文
     * @param url 图片的 URL 地址
     * @param placeholderResId 占位符资源 id
     * @param errorResId 错误图资源 id
     * @param imageView 目标 ImageView
     */
    fun loadCircularImage(
        context: Context,
        url: String,
        placeholderResId: Int,
        errorResId: Int,
        imageView: ImageView
    ) {
        Glide.with(context)
            .load(url)
            .apply(
                RequestOptions()
                    .circleCrop()   // 圆形裁剪
                    .placeholder(placeholderResId)
                    .error(errorResId)
            )
            .into(imageView)
    }

    /**
     * 加载居中裁剪的图片。
     *
     * @param context 上下文
     * @param url 图片的 URL 地址
     * @param imageView 目标 ImageView
     */
    fun loadCenterCropImage(
        context: Context,
        url: String,
        imageView: ImageView
    ) {
        Glide.with(context)
            .load(url)
            .apply(RequestOptions.centerCropTransform())
            .into(imageView)
    }

    /**
     * 清除 ImageView 中的图片，释放资源。
     *
     * @param context 上下文
     * @param imageView 目标 ImageView
     */
    fun clearImage(context: Context, imageView: ImageView) {
        Glide.with(context).clear(imageView)
    }
}
